www.gusucode.com > 超声波测量以及形成图像 对相关信号进行模拟仿真 > 超声波测量以及形成图像 对相关信号进行模拟仿真/digital holograpy/prog/Qmap.m

    function [ q ] = Qmap( a,sz )
%QMAP Calculate the Quality map of a phase map
%  Syntax:
%  [ q ] = Qmap( a,sz )
%
%  a is a phase map
%  sz is the size of the mask
%  q is the quality map
%
%  ------------------------------------------------------------------------
%  Reference:
%  [1]
%  吴禄慎 任丹 吴魁  一种新的区域增长相位去包裹算法
%  南昌大学机电工程学院江西南昌330029)
%  南昌大学电子信息工程学院江西南昌330029)
%  ------------------------------------------------------------------------
error(nargchk(2,2,nargin))
if nargout>1
    error('Too many output arguments')
end
[M,N]=size(a);
qx=zeros([M,N]);
qy=qx;
a=exp(i*a);
dadx=angle([a(:,2:N),zeros(M,1)]./a);
dady=angle([a(2:M,:);zeros(1,N)]./a);

% dadx=angle(circshift(a,[0,1])./circshift(a,[0,-1]));
% dady=angle(circshift(a,[1,0])./circshift(a,[-1,0]));
% dadx=conv2(dadx,[1;2;1]./4,'same');
% dady=conv2(dady,[1,2,1]./4,'same');

clear a

avx=conv2(dadx,ones(sz(1),sz(2)),'same')./sz(1)./sz(2);
avy=conv2(dady,ones(sz(1),sz(2)),'same')./sz(1)./sz(2);

left=round((sz(2)-1)/2);
right=sz(2)-1-left;
up=round((sz(1)-1)/2);
down=sz(1)-1-up;

for svy=up:-1:-down
    for svx=left:-1:-right
        qx=qx+(avx-circshift(dadx,[svy,svx])).^2;
        qy=qy+(avy-circshift(dady,[svy,svx])).^2;
    end
end
q=(sqrt(qx)+sqrt(qy))./sz(1)./sz(2);